package com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.activity.doctor;

/*
* Bundle               用于    在【活动之间传递数据】；
* BottomNavigationView 用于   【创建底部导航栏】的组件；
* AppCompatActivity          【Android 活动的基类】；
* NavController 和 Navigation 类与 【Android 导航组件】相关，用于【管理页面间的导航】；
* AppBarConfiguration 和 NavigationUI 则用于【配置和设置导航栏与操作栏】；
* ActivityHomeDoctorBinding 是视图绑定生成的类，用于【访问布局文件里的视图】。
* */

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.R;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.databinding.ActivityHomeDoctorBinding;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.model.UserViewModel;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.utils.GlobalViewModelStore;
import com.example.ai_basedintelligentdiagnosisandtreatmentofchildren.utils.MyApplication;
import com.google.android.material.bottomnavigation.BottomNavigationView;

//医生端主界面
public class ActivityHomeDoctor extends AppCompatActivity {

    //1.私有成员声明
    //视图绑定能够让你更便捷地访问布局文件中的视图，避免使用 findViewById 方法。
    private ActivityHomeDoctorBinding binding;
    private UserViewModel userViewModel;

    //2.OnCreate方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //调用父类 AppCompatActivity 的 onCreate 方法，以此确保父类的初始化逻辑得以执行。
        super.onCreate(savedInstanceState);

        //3.视图绑定
        //借助 [视图绑定] 来加载 ActivityHomeDoctor 布局文件。
        // inflate 方法会依据布局文件【创建视图层次结构】，并返回一个 ActivityHomeDoctorBinding 实例。
        binding = ActivityHomeDoctorBinding.inflate(getLayoutInflater());
        //调用 setContentView 方法，将【加载的布局】设置为【活动的内容视图】。
        setContentView(binding.getRoot());

        setUserViewModel();

        setBottomNavigationView();

    }

    private void setUserViewModel(){
        //用户身份
        // 获取全局共享的 UserViewModel
        userViewModel = GlobalViewModelStore
                .getInstance(MyApplication.getInstance())
                .get(UserViewModel.class);
        //
        userViewModel.setUserType("doctor");
    }

    private void setBottomNavigationView() {

        //4.底部导航栏
        //通过 findViewById 方法获取布局文件中 id 为 nav_view 的 BottomNavigationView 实例。
        BottomNavigationView navView = findViewById(R.id.nav_view);

        //5.导航配置
        //创建一个 AppBarConfiguration 对象，用于配置操作栏。
        // Builder 方法接收一系列菜单 id，这些 id 代表顶级目的地。
        // 在底部导航栏中选择这些目的地时，操作栏不会显示返回按钮。
        AppBarConfiguration appBarConfiguration =
                new AppBarConfiguration.Builder(
                        R.id.navigation_home_doctor,
                        R.id.navigation_community,
                        R.id.navigation_chat,
                        R.id.navigation_ai,
                        R.id.navigation_persionalcenter,
                        R.id.navigation_medicinereminder)
                        .build();

        //6.导航控制器
        //通过 Navigation.findNavController 方法获取【导航控制器实例】。
        // 导航控制器负责管理导航图中的页面导航。
        // R.id.nav_host_fragment_activity_home_doctor 是 NavHostFragment 的 id，
        // 它是导航组件的容器，用于显示不同的目的地。
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_home_doctor);

        //7.导航控制器配置
        // 将【导航控制器】与【操作栏】 [关联] 起来。
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
        // 将【导航控制器】与【底部导航栏】 [关联] 起来。
        NavigationUI.setupWithNavController(binding.navView, navController);

        // 使用新的 setOnItemSelectedListener 方法
        navView.setOnItemSelectedListener(item -> {
            if (item.getItemId() == R.id.navigation_home_doctor) {
                // 重置导航栈
                navController.popBackStack(R.id.navigation_home_doctor, false);
            }
            return NavigationUI.onNavDestinationSelected(item, navController);
        });
    }
}


/*底部导航栏运作流程：
* 1.布局文件定义界面，
* 2.菜单项定义导航选项，
* 3.导航图定义页面关系，
* 4.活动中设置导航关联，
* 5.用户点击菜单项触发导航控制器切换页面。
* */